我們的選單場景不會陪伴我們到永遠。
我們需要新的場景來處理隊伍移動,還有另一個場景來處理戰鬥。
但是問題是,我們該怎麼讓下個場景知道我們的模式是什麼?
那些變數該怎麼傳輸?
我們隆重介紹:
public void SetGameMode(string mode)
{
PlayerPrefs.SetString("SelectedGameMode", mode);
PlayerPrefs.Save();
}
SetGameMode()可以隨意插入你的程式碼,並儲存你需要的玩家偏好設定。
只需要簡單的SetString並Save,等等即可GetString。
只需要記住當初儲存的關鍵字是什麼就好。
我們編輯我們在GameModeSelectionController的程式碼:
public void StartNewGameButtonClicked()
{
SetGameMode(currentgameMode.ToString());
mainMenuController.StartNewGame();
}
// Start is called before the first frame update
void Start()
{
currentgameMode = GameMode.Standard;
gameModeSelectionPanel.SetActive(false);
SetGameMode(currentgameMode.ToString());
}
public void SetGameMode(string mode)
{
PlayerPrefs.SetString("SelectedGameMode", mode);
PlayerPrefs.Save();
}
我們建立新的遊戲模式設定函式,並在初始和建立新遊戲的函式中使用。
然後我們來到新場景,並建立新的空遊戲物件。
建立地圖生成程式碼:
進入程式碼,取回玩家偏好值的「遊戲模式」:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MapGenerator: MonoBehaviour
{
public string selectedGameMode;
// Start is called before the first frame update
void Start()
{
selectedGameMode = PlayerPrefs.GetString("SelectedGameMode");
}
// Update is called once per frame
void Update()
{
}
}
當我們要測試的時候:
Scene 'GameMapScene' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded.
To add a scene to the build settings use the menu File->Build Settings...
UnityEngine.SceneManagement.SceneManager:LoadScene (string)
MainMenuController:StartNewGame () (at Assets/Scripts/MainMenuController.cs:13)
GameModeSelectionController:StartNewGameButtonClicked () (at Assets/Scripts/GameModeSelectionController.cs:56)
UnityEngine.EventSystems.EventSystem:Update ()
這代表我們還沒將新的地圖場景加入遊戲設定的場景中。
我們點擊上方選單的Menu,進入建置設定。
我們在背景先載入好新的場景,回到設定面板,點擊Add Open Scene。
如此一來,場景就被設定好了。
既然停留在這個頁面了,那加個TMP文字再走吧。
記得程式也要更新,這樣模式顯示才會跟著之前選的走。
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class MapGenerator: MonoBehaviour
{
public string selectedGameMode;
public TMP_Text GameModeText;
// Start is called before the first frame update
void Start()
{
selectedGameMode = PlayerPrefs.GetString("SelectedGameMode");
GameModeText.text = selectedGameMode;
}
// Update is called once per frame
void Update()
{
}
}
回到選單場景,再來一次。
終於啊!感謝主。
那麼今天就到這裡囉?